<?php
	/**
	 * Função que gera o html para incluir um arquivo JS
	 * @param $arq Nome do arquivo para ser incluído (é admitido que ele se encontra em: $urlRaiz/js/$arq
	 */
	function js_include_arq($arq)
	{
		GLOBAL $diretorioRaiz, $urlRaiz;
		if(strstr($arq, '.js') === false){
			$arq .= '.js';
		}
		
		if(file_exists("$diretorioRaiz/js/jquery.$arq")){
			$arq = 'jquery.'.$arq;
		}
		else if(file_exists("$diretorioRaiz/js/jquery.ui.$arq")){
			$arq = 'jquery.ui.'.$arq;
		}
		
		echo '<script src="'.$urlRaiz.'/js/'.$arq.'" type="text/javascript"></script>';
	}
	
	/*Variaveis globais para implementar o include de JS usando o plugin chamado head (executa arquivos em paralelo)*/
	$head = array();
	$head_func = array("jall");
	
	/**
	 * Função que adiciona um arquivo para o plugin head executar em paralelo
	 * @param $arq Nome do arquivo para ser incluído (é admitido que ele se encontra em: $urlRaiz/js/$arq
	 */
	function head_include_arq($arq)
	{
		GLOBAL $head, $urlRaiz;
		
		if(strstr($arq, '.js') === false){
			$arq .= '.js';
		}
		
		if(file_exists("$diretorioRaiz/js/jquery.$arq")){
			$arq = 'jquery.'.$arq;
		}
		else if(file_exists("$diretorioRaiz/js/jquery.ui.$arq")){
			$arq = 'jquery.ui.'.$arq;
		}

		$head[] = "'$urlRaiz/js/$arq'";
	}
	
	/**
	 * Função para o plugin head executar no inicio do jquery
	 * @param $func
	 */
	function head_include_function($func)
	{
		GLOBAL $head_func;
		
		$head_func[] = $func;
	}
	
	/**
	 * Inclui todos os arquivos e funções usando o plugin head
	 */
	function head_execute()
	{
		GLOBAL $head, $head_func;
		
		echo '<script type="text/javascript">';
		echo 'head.js(';
		foreach($head as $index => $arq){ if($index > 0) echo ', '; echo $arq; } 
		echo '); ';
		echo 'head.ready(function() { ';
		foreach($head_func as $func) echo 'if(typeof '.$func.' == "function") { '.$func.'(); } ';
		echo ' });';
		echo '</script>';
	}
	
	/**
	 * Recebe uma lista de arquivos com nomes diferentes de jquery.js, funcoes.js e head.js e chama eles na ordem.
	 * No caso de plugins também é chamado uma função de inicio (j + nome_do_arquivo). Exemplo: js_include(tinymce); além de incluir o plugin, chama a função jtinymce();
	 */
	function js_include()
	{
		js_include_arq('head');
		
		head_include_arq('jquery');
		head_include_arq('funcoes');
		
		
		$plugins = func_get_args(); // Eu admito que são plugins, porém podem ser qualquer arquivo que esteja em $urlRaiz/js/$arq
		foreach($plugins as $index => $plugin){
			if(is_string($plugin)){
				$func = 'j'.$plugin;
				if($plugin == 'tinymce' || $plugin == 'tiny_mce'){
					$plugin = 'tiny_mce/tiny_mce';
					$func = 'jtinymce';
				}
				head_include_arq($plugin);
				head_include_function($func);
			}
		} 
		
		head_execute();
	}
?>